package org.jeecg.modules.oms.service;

import org.jeecg.modules.oms.vo.FinanceStatisticsVO;

import javax.servlet.http.HttpServletResponse;
import java.util.List;
import java.util.Map;

/**
 * @Description: 财务统计服务接口 - 应收应付模块
 * @Author: jeecg-boot
 * @Date: 2025-01-13
 * @Version: V1.0
 */
public interface IFinanceStatisticsService {

    // ==================== 应收应付树形结构数据方法 ====================

    /**
     * 获取应收账款树形结构数据（客户-工程-订单三级）
     *
     * @param startDate 开始日期 (格式: yyyy-MM-dd)
     * @param endDate   结束日期 (格式: yyyy-MM-dd)
     * @return 应收账款树形结构数据
     */
    List<Map<String, Object>> getReceivableTreeData(String startDate, String endDate);

    /**
     * 获取应付账款树形结构数据（供应商-采购单-采购明细三级）
     *
     * @param startDate 开始日期 (格式: yyyy-MM-dd)
     * @param endDate   结束日期 (格式: yyyy-MM-dd)
     * @return 应付账款树形结构数据
     */
    List<Map<String, Object>> getPayableTreeData(String startDate, String endDate);

    /**
     * 获取应收应付汇总统计数据
     *
     * @param startDate 开始日期 (格式: yyyy-MM-dd)
     * @param endDate   结束日期 (格式: yyyy-MM-dd)
     * @return 应收应付汇总统计数据
     */
    Map<String, Object> getReceivablePayableSummary(String startDate, String endDate);

    /**
     * 获取应收账款概览数据
     *
     * @param startDate 开始日期 (格式: yyyy-MM-dd)
     * @param endDate   结束日期 (格式: yyyy-MM-dd)
     * @return 应收账款概览数据
     */
    FinanceStatisticsVO.ReceivableOverviewVO getReceivableOverview(String startDate, String endDate);

    /**
     * 获取应付账款概览数据
     *
     * @param startDate 开始日期 (格式: yyyy-MM-dd)
     * @param endDate   结束日期 (格式: yyyy-MM-dd)
     * @return 应付账款概览数据
     */
    FinanceStatisticsVO.PayableOverviewVO getPayableOverview(String startDate, String endDate);

    /**
     * 获取应收应付对比图表数据
     *
     * @param startDate 开始日期 (格式: yyyy-MM-dd)
     * @param endDate   结束日期 (格式: yyyy-MM-dd)
     * @param period    统计周期 (day/week/month/year)
     * @return 应收应付对比图表数据
     */
    List<Map<String, Object>> getReceivablePayableComparisonData(String startDate, String endDate, String period);

    /**
     * 获取账期分析图表数据
     *
     * @param startDate 开始日期 (格式: yyyy-MM-dd)
     * @param endDate   结束日期 (格式: yyyy-MM-dd)
     * @return 账期分析图表数据
     */
    List<Map<String, Object>> getAgingAnalysisData(String startDate, String endDate);

    /**
     * 获取资金流动性分析数据
     *
     * @param startDate 开始日期 (格式: yyyy-MM-dd)
     * @param endDate   结束日期 (格式: yyyy-MM-dd)
     * @param period    统计周期 (day/week/month/year)
     * @return 资金流动性分析数据
     */
    List<FinanceStatisticsVO.LiquidityItem> getLiquidityAnalysis(String startDate, String endDate, String period);

    /**
     * 导出应收应付明细数据到Excel
     *
     * @param startDate 开始日期 (格式: yyyy-MM-dd)
     * @param endDate   结束日期 (格式: yyyy-MM-dd)
     * @param response  HTTP响应对象
     */
    void exportReceivablePayableData(String startDate, String endDate, HttpServletResponse response);
}
